package com.it.blog.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.it.blog.entity.*;
import com.it.blog.service.ArticleService;
import com.it.blog.service.WebsiteConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @Author: 羡羡
 * @Date: 2022/01/26/13:38
 */
@Controller
public class FondeskController {
    /**
     * 网站信息
     */
    @Autowired
    WebsiteConfigService webse;
    @Autowired
    ArticleService arse;

    Logger logger = LoggerFactory.getLogger("SampleLogger");

    /**
     * 首页
     * @return
     */
    @GetMapping({"/","/index"})
    public String index(ModelMap mp, @RequestParam(defaultValue = "1") int pagenum) throws Exception {
        //查询整个网站的信息
        WebsiteConfig web=webse.webconfigall();
        //发送到前台
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //把计算的时间发送到前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        logger.info("进入首页！");
        //统计文章的总数
        int aralllcount=arse.arcount();
        //把文章的总数发送到前台
        mp.put("acnumber",aralllcount);
        //进行分页 每页7条
        PageHelper.startPage(pagenum,7);
        //得到所有的信息
        List ls=arse.artall();
        //定义分页栏的长度
        PageInfo pa=new PageInfo(ls,10);
        System.out.println(ls);
        //文章分页信息发送到前台
        mp.put("wzconfig",pa);
        //获取热门推荐
        List hotrem=arse.hotrec();
        //把热门文章发送到前台
        mp.put("hotrm",hotrem);
        //获取到类别的信息
        List indextypelis=arse.indtype();
        System.out.println(indextypelis);
        //把首页的类别发送到前台
        mp.put("indextype",indextypelis);
        //获取标签
        List indexlab=arse.indexlable();
        System.out.println(indexlab);
        //把标签发送到前台
        mp.put("indexlab",indexlab);
        return "fontdesk/index";
    }

    /**
     * 类别
     * @return
     */
    @GetMapping(path = "/blogtype/{blogid}")
    public String blogtype(ModelMap mp,@PathVariable("blogid")int blogid,@RequestParam(defaultValue = "1") int pagenum){
        logger.info("blogid:"+blogid);
        //获取整个网站的信息
        WebsiteConfig web=webse.webconfigall();
        //把网站信息发送到前台
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //把计算的时间发送到前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        logger.info("进入类别！");
        //获取类别的所有内容
        List tylis=arse.typeall();
        //把类别发送到前台
        mp.put("tylis",tylis);
        //判断博客类别的ID
        if (blogid==0){
            //如果博客类别的ID==0的话就得到所有类别的第一个
            TypeCount ty=(TypeCount)tylis.get(0);
            //得到第一个ID赋值给博客类别的ID
            blogid=ty.articletypeid;
        }else{
            //博客类别ID不是等于0的话就 博客ID等于博客的ID
            blogid=blogid;
        }
        //分页 每页8条
        PageHelper.startPage(pagenum,8);
        //查询对应的文章内容
        List typeblog=arse.typeblog(blogid);
        PageInfo typa=new PageInfo(typeblog,10);
        //把博客的ID的发送到前台 提供给分页使用
        mp.put("blogid",blogid);
        //把文章信息发送到前台
        mp.put("typeblog",typa);
        return "fontdesk/types";
    }

    /**
     * 标签
     * @return
     */
    @GetMapping(path = "/bloglable/{lableid}")
    public String bloglable(ModelMap mp,@PathVariable("lableid") int lableid,@RequestParam(defaultValue = "1")int pagenum){
        WebsiteConfig web=webse.webconfigall();
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //把运行时间发送前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        logger.info("进入标签！");
        //获取所有的标签
        List labal=arse.lableall();
        //把标签发送到前台
        mp.put("labal",labal);
        //判断标签的ID
        if(lableid==0){
            //如果ID==0的话就取数组的第一个
            LableCount lab= (LableCount) labal.get(0);
            //获取数组的第一个的ID赋值给ID
            lableid=lab.articlelableid;
        }else{
            //不等于0的话 就 等于原值
            lableid=lableid;
        }
        logger.info("lableid:"+lableid);
        //把标签的ID发送到前台
        mp.put("labid",lableid);
        //分页 每页8条
        PageHelper.startPage(pagenum,8);
        //查询标签对应的文章内容
        List tagblog=arse.Tagblog(lableid);
        PageInfo tagbl=new PageInfo(tagblog,10);
        //把标签查询的对应文章发送到前台
        mp.put("tagbl",tagbl);
        System.out.println("170:"+tagbl.getList());
        //把标签ID发送到前台 前台用来分页
        mp.put("lableid",lableid);
        return "fontdesk/tags";
    }

    /**
     * 归档
     * @return
     */
    @GetMapping("/blogarchives")
    public String blogarchives(ModelMap mp){
        WebsiteConfig web=webse.webconfigall();
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //运行时间发送前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        //得到文章的总数
        int arcoun=arse.arcount();
        //把总数发送到前台
        mp.put("arcoun",arcoun);
        logger.info("进入归档！");
        //得到所有的年分类
        Map<String, List<Article>> blmap=arse.findyearblog();
        System.out.println(blmap);
        //把Map发送到前台
        mp.put("blmap",blmap);
        return "fontdesk/archives";
    }

    /**
     * 关于我
     * @return
     */
    @GetMapping("/blogabout")
    public String blogabout(ModelMap mp){
        //保存作者的爱好
        List hobli=new ArrayList();
        //查询整个网站的信息
        WebsiteConfig web=webse.webconfigall();
        //发送到前台
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //运行时间发送前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        //截取作者爱好 数据库存：hobby1,hobby2..
        String[] hobby=web.websitehobby.split(",");
        //循环得到爱好
        for (int i=0;i<hobby.length;i++){
            //放到爱好的数组中
            hobli.add(hobby[i]);
        }
        //把爱好list的发送到前台
        mp.put("hobby",hobli);
        //保存作者的编程语言
        List lovelang=new ArrayList();
        //截取作者的编程语言 有多个 数据库存：lang1,lang2..
        String[] prolang=web.websitelang.split(",");
        //循环得到编程语言
        for(int i=0;i<prolang.length;i++){
            //放入list
            lovelang.add(prolang[i]);
        }
        //编程语言发送到前台
        mp.put("lolang",lovelang);
        logger.info("进入关于我！");
        return "fontdesk/about";
    }


    /**
     * 搜索
     * @param query
     * @return
     */
    @GetMapping("/search")
    public String search(ModelMap mp,String query,@RequestParam(defaultValue = "1")int pagenum){
        WebsiteConfig web=webse.webconfigall();
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //运行时间发送前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        //分页 pagenum 当前页  每页8条
        PageHelper.startPage(pagenum,8);
        //搜索查询
        List selis=arse.searchlis(query);
        //分页结果
        PageInfo paselist=new PageInfo(selis,10);
        //搜索分页结果发送前台
        mp.put("seli",paselist);
        System.out.println(selis);
        //把搜索的值发生给前台
        mp.put("queryval",query);
        return "fontdesk/search";
    }

    /**
     * 博客
     * @return
     */
    @GetMapping("/blogarticle/{blogid}")
    public String blogarticle(ModelMap mp,@PathVariable("blogid")int blogid){
        logger.info("博客ID："+blogid);
        //查询整个网站的信息
        WebsiteConfig web=webse.webconfigall();
        //发送到前台
        mp.put("webconfig",web);
        //得到运行的时间
        String time=webse.GetComTime();
        //把计算的时间发送到前台
        mp.put("time",time);
        //获取到文章的观看总数
        int wacount=arse.blogwacount();
        //把总观看数发送前台
        mp.put("wacount",wacount);
        //获取文章信息
        ArticleTag artag=arse.findblog(blogid);
        //浏览+1
        arse.watchnm(blogid);
        logger.info("进入博客！");
        //把网站信息发送前台
        mp.put("arcontxt",artag);
        return "fontdesk/blog";
    }
}
